package com.jdbc.jdbc;

import com.mysql.cj.jdbc.Driver;

import java.sql.*;

/**
 * JDBC-1
 * Description: 利用JDBC连接数据库，并完成数据查询
 *
 * TODO: JDBC步骤总结
 *    1. 注册驱动：通过```DriverManager```注册```Driver```。
 *    2. 获取连接：通过```DriverManager```获取连接```Connection```。
 *    3. 创建对象：通过```Connection```创建发送SQL的对象```Statement```。
 *    4. 执行SQL：通过```Statement```的```executeQuery```方法执行SQL并获取查询结果```ResultSet```。
 *    5. 结果解析：通过```ResultSet```的```next()```方法判断是否还有结果数据，通过```getObject()、getString()```等获取字段值。
 *    6. 关闭资源：关闭```ResultSet、Statement、Connection```。
 */
public class JdbcStatementQueryPart {

    public static void main(String[] args) throws SQLException {

        // 1.注册驱动
        /**
         * TODO: Driver 依赖驱动版本
         *  驱动版本 8+ 使用com.mysql.cj.jdbc.Driver
         *  驱动版本 5+ 使用com.mysql.jdbc.Driver
         */
        DriverManager.registerDriver(new Driver());

        // 2.获取连接
        /**
         * TODO:
         *   面向接口编程，使用java.sql.Connection接口接收返回结果，接口 = 实现类
         *   @url 格式 jdbc:mysql://ipaddress:port/dbname
         */
        Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/jdbc",
                "root",
                "root");

        // 3.创建发送SQL语句的对象
        Statement statement = connection.createStatement();

        // 4.发送SQL语句
        String sql = "select id,account,password,nickname from t_user ;";
        ResultSet resultSet = statement.executeQuery(sql);

        // 5.结果集解析，有下一行数据就进行获取
        while (resultSet.next()){
            int id = resultSet.getInt("id");
            Object account = resultSet.getObject("account");
            String password = resultSet.getString("password");
            String nickname = resultSet.getString("nickname");
            System.out.println(id+"::"+account+"::"+password+"::"+nickname);
        }

        // 6.关闭资源
        resultSet.close();
        statement.close();
        connection.close();
    }
}
